#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QUdpSocket>
#include<QDebug>
#include<QTcpSocket>
#include<QMetaEnum>
#include <QTimer>
#include "message.h"


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

/**
 * @brief 实现发送心跳包,
 * @note UDP 心跳包（Heartbeat Packet）是一种用于检测网络节点是否存活的机制。
 * 它通过定期发送小型的数据包来维持和监测通信的可靠性。
 * 客户端定时发送心跳数据
 */
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:
    /**
     * @brief 发送消息
     * @param array
     */
    void sendMessage(Message &msg);

private slots:
    /**
     * @brief 显示消息
     * @param info
     */
    void showMessage(const QString &info);
    void on_btnSend_clicked();

    /**
     * @brief 数据到来的信号
     */
    void  slotReadyRead();

    /**
     * @brief 出错
     */
    void slotError(QAbstractSocket::SocketError);

private:
    Ui::Widget *ui;
    QUdpSocket  m_udp;
    QTimer m_timer; ///< 心跳定时器

};
#endif // MAINWINDOW_H
